/*--------------------------------------------------------------------------------
    Copyright (c) Microsoft Corporation. All rights reserved. See license.txt for license information.

*/
/**
    \file

    \brief       Defines the product-specific dependencies for SCXSystemLib
    \date        2013-02-25 11:20:00
*/
/*----------------------------------------------------------------------------*/
#ifndef SCXSYSTEMLIBPRODUCTDEPENDENCIES_H
#define SCXSYSTEMLIBPRODUCTDEPENDENCIES_H

#include <scxcorelib/scxcmn.h>
#include <scxcorelib/scxlogitem.h>

#include <set>
#include <string>

namespace SCXSystemLib
{
    namespace SCXProductDependencies
    {
        // Needed for OSTypeInfo
        /*----------------------------------------------------------------------------*/
        /**
           The developer must implement this function to return a path 
           to the GetLinuxOS.sh script.
           
           \returns a wstring containing a path to the GetLinuxOS.sh script
        */
        std::wstring GetLinuxOS_ScriptPath();

        /*----------------------------------------------------------------------------*/
        /**
           The developer must implement this function to return a path 
           to the scx-release file that is generated by the GetLinuxOS.sh script.
           
           \returns a wstring containing a path to the scx-release file.
        */
        std::wstring GetLinuxOS_ReleasePath();

        // Needed for Disk subsystem (only called once per image startup)
        /*----------------------------------------------------------------------------*/
        /**
           The developer must implement this function to modify (or replace) the param
           igfs that is passed. The parameter is a set of wstrings containing filesystems 
           that are ignored from the mount table.
           
           \param[in,out] igfs  - the set of ignored filesystems that will be modified
             by this function
        */
        void Disk_IgnoredFileSystems( std::set<std::wstring> &igfs );

        /*----------------------------------------------------------------------------*/
        /**
           The developer must implement this function to modify (or replace) the param
           igfs that is passed. The parameter is a set of wstrings that will exclude any
           filesystem that begins with these any of the elements in this set.
           
           \param[in,out] igfs  - the set of ignored filesystem prefixes that will be modified
             by this function
        */
        void Disk_IgnoredFileSystems_StartsWith( std::set<std::wstring> &igfs );

        /*----------------------------------------------------------------------------*/
        /**
           The developer must implement this function to modify (or replace) the param
           igfs that is passed. The parameter is a set of wstrings that will exclude any
           filesystem that contains any of the elements in this set.
           
           \param[in,out] igfs  - filesystems will be ignored if any element in igfs is
             found inside the filesystem name
        */
        void Disk_IgnoredFileSystems_Contains( std::set<std::wstring> &igfs );

        /*----------------------------------------------------------------------------*/
        /**
           The developer must implement this function to modify (or replace) the param
           igfs that is passed. The parameter is a set of wstrings that will exclude any
           filesystem from having a link to a physical device that matches any element
           from this set.
           
           \param[in,out] igfs  - filesystems will be considered to have no physical link
             if they match exactly any element in this set.
        */
        void Disk_IgnoredFileSystems_NoLinkToPhysical( std::set<std::wstring> &igfs );
    }
}


#endif // SCXSYSTEMLIBPRODUCTDEPENDENCIES_H
